package Reflection.Field;

import java.lang.reflect.Field;

/**
 * @author zxc
 * @date 2023/04/07 23:33
 **/
public class FieldDemo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        method1();
        method2();
        method3();
        method4();
    }
    // 根据成员变量名，获取指定的成员变量
    private static void method4() throws ClassNotFoundException, NoSuchFieldException {
        // Field getDeclaredField(String name)：返回单个成员变量对象
        System.out.println("返回单个成员变量对象==================");
        //1.获取class对象
        Class clazz = Class.forName("Reflection.Field.Student");
        //2.获取money成员变量
        Field field = clazz.getDeclaredField("money");
        System.out.println(field);
    }
    // 根据成员变量名，获取指定的公共成员变量
    private static void method3() throws ClassNotFoundException, NoSuchFieldException {
        //  Field getField(String name)：返回单个公共成员变量对象
        System.out.println("返回单个公共成员变量==================");
        //想要获取的成员变量必须是真实存在的
        //且必须是public修饰的.
        //1.获取class对象
        Class clazz = Class.forName("Reflection.Field.Student");
        //2.获取name这个成员变量
        Field field = clazz.getField("name");
        System.out.println(field);
    }
    // 获取当前类的所有成员变量（public/protected/private...）
    private static void method2() throws ClassNotFoundException {
        // Field[] getDeclaredFields()：返回所有成员变量对象的数组
        System.out.println("返回所有成员变量==================");
        //1.获取class对象
        Class clazz = Class.forName("Reflection.Field.Student");
        //2.获取所有的Field对象
        Field[] fields = clazz.getDeclaredFields();
        //3.遍历
        for (Field field : fields) {
            System.out.println(field);
        }
    }
    // 获取当前类的所有公共成员变量（public）
    private static void method1() throws ClassNotFoundException {
        // Field[] getFields()：返回所有公共成员变量对象的数组
        System.out.println("返回所有公共成员变量==================");
        //1.获取class对象
        Class clazz = Class.forName("Reflection.Field.Student");
        //2.获取Field对象.
        Field[] fields = clazz.getFields();
        //3.遍历
        for (Field field : fields) {
            System.out.println(field);
        }
    }
}
